<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /* 
            arguments
                - arguments是函数中有一个隐含参数
                - arguments是一个类数组对象(伪数组)
                    和数组相似,可以通过索引来读取元素,通过for循环变量,但是他不是一个数组对象,不能调用数组的方法
                - arguments用来存储函数的实参,
                    无论用户是否定义形参,实参都会存储到arguments对象中国
                    可以通过该对象直接访问实参
        */

        function sum() {
             let result = 0
             for (let i of arguments) {
                console.log(i);
                result += i
             }
             return result
            
        }
        sum(1,23,4)
        console.log(sum(33,44,5));
        /*  
            可变参数,在定义函数时将参数指定为可变参数
                - 可变参数可以接收任意数量实参,并将他们统一存储到一个数组中返回
                - 可变参数的作用和arguments基本是一只的,但是也具有一些不同的点:
                    1. 可变参数的名字可以自己制定
                    2. 可变参数就是一个数组,可以直接使用数组的方法
                    3. 可变参数可以配合其他参数一起使用
        */
       function fn(a,b,...array){
            
            return array.reduce((a,b)=>a+b,0)
       }
       console.log(fn(1,2,4,5));


    </script>
</head>
<body>
    
</body>
</html>